package main.java.com.chankudo.thread;
/**
 * 多线程消费队列示例（synchronized关键字）
 * 线程包括：生产者、消费者 线程
 */
public class SimpleWaitQueue {
    private int [] queue;
    private int index;
    private int size;

    public SimpleWaitQueue(int size) {
        this.queue = new int[size];
        this.size = size;
        this.index = 0;
    }

    public synchronized int get(){
        while (index<=0) {//队列为空，消费者等待。
            try {
                System.out.println("---queue is empty, consumer has to wait---");
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        // 这个时候消费一个元素
        index-=1;
        int ele = queue[index];
        notify(); // 通知 生产者可以生产元素了
        System.out.println("consume a ele:" + ele);
        return ele;
    }

    public synchronized void put() {
        while(index>=size){//队列满，生产者等待
            try {
                System.out.println("---queue is full, producer has to wait---");
                wait();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        // 这个时候队列有位置，放一个元素
        int tmpEle = (int)(Math.random()*100);
        System.out.println("produce a ele:" + tmpEle);
        queue[index] = tmpEle;
        index+=1;
        notify(); //通知消费者 队列有元素了
        return;
    }
    
    
}
